package 数据结构下

/**
 * 折叠(java中折叠的概念放到了reduce中,即带初始值的reduce函数)
 * 折叠的理解几乎和归约reduce一样
 * 1. list.foldLeft(5)(minus) 理解成 list(5,1,2,3,4),就像是带了初始值
 */
object FoldDemo {
  def main(args: Array[String]): Unit = {
    val minus = List(1, 2, 3, 4)
    /*概念:函数的科里化!*/
    val i = minus.foldLeft(5)(-)
    println(i)
    /*结果: -5*/
    val i1 = minus.foldRight(5)(-)
    println(i1)
    //注意foldRight的运算顺序,相当于是{1,2,3,4,5},然后4-5=-1, 3- -1=4,2-4=-2 , 1- -2=3,
    //无论是left,还是right 最终运算的顺序是不变的都是 从左到右,两个数运算,结果与下一个继续运算
    /*结果:3*/
  }

  def -(x: Int, y: Int): Int = {
    x - y
  }
}

